package com.zhoug.audiorecorder;

import android.media.AudioFormat;
import android.media.MediaRecorder;

/**
 * AudioRecord 配置
 * @description: 类的简要描述
 * @author: 35574
 * @date: 2025/10/27 17:00
 */
public class AudioRecordConfig {

    /**
     * 音频来源 指定音频数据的输入源设备  默认麦克风
     */
    private int audioSource = MediaRecorder.AudioSource.MIC;
    /**
     * 采样率 每秒对音频信号采样的次数。单位是赫兹（Hz）。采样率越高，音频保真度越好，但数据量也越大 默认 44100
     */
    private int sampleRate = 44100;//
    /**
     * 声道配置 音频的声道数量 默认单声道
     */
    private int channelConfig = AudioFormat.CHANNEL_IN_MONO; //
    /**
     * 音频格式 音频数据的采样精度（数据位宽），即每个采样点用多少位数据来表示 默认 16位采样
     */
    private int audioFormat = AudioFormat.ENCODING_PCM_16BIT; //
    /**
     * 设置读取音频数据时每次读取的数据大小,为0时默认为缓冲区大小
     */
    private int readBufferSize = 0;

    /**
     * 音频来源
     * @param audioSource 默认 默认麦克风
     * @return
     */
    public AudioRecordConfig setAudioSource(int audioSource) {
        this.audioSource = audioSource;
        return this;
    }

    /**
     * 采样率
     * @param sampleRateInHz 默认 16kHz
     * @return
     */
    public AudioRecordConfig setSampleRate(int sampleRateInHz) {
        this.sampleRate = sampleRateInHz;
        return this;
    }

    /**
     *  声道
     * @param channelConfig 默认 单声道
     * @return
     */
    public AudioRecordConfig setChannelConfig(int channelConfig) {
        this.channelConfig = channelConfig;
        return this;
    }

    /**
     * 音频格式
     * @param audioFormat 默认 16位采样
     * @return
     */
    public AudioRecordConfig setAudioFormat(int audioFormat) {
        this.audioFormat = audioFormat;
        return this;
    }

    /**
     * 设置读取音频数据时每次读取的数据大小,为0时默认为缓冲区大小
     * @param readBufferSize
     * @return
     */
    public AudioRecordConfig setReadBufferSize(int readBufferSize) {
        this.readBufferSize = readBufferSize;
        return this;
    }

    public int getAudioSource() {
        return audioSource;
    }

    public int getSampleRate() {
        return sampleRate;
    }

    public int getChannelConfig() {
        return channelConfig;
    }

    public int getAudioFormat() {
        return audioFormat;
    }

    public int getReadBufferSize() {
        return readBufferSize;
    }
}
